﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;

namespace ImpactTenis.AcessoADados.Gerentes
{
    public class GerenteDados
    {
        private string _connectionString { get; set; }

        public GerenteDados(){
            _connectionString = ConfigurationManager.ConnectionStrings["ImpactTenis"].ConnectionString;
        }

        public bool CadastrarUsuario(int funcional, string senha, string nome, int idTipoUsuário)
        {
            try
            {
                using (var conexao = new SqlConnection(_connectionString))
                {
                    var command = new SqlCommand(ConsultasSQL.SQL.CadastrarUsuario(), conexao);
                    command.Parameters.AddWithValue("@Funcional", funcional);
                    command.Parameters.AddWithValue("@Senha", senha);
                    command.Parameters.AddWithValue("@Nome", nome);
                    command.Parameters.AddWithValue("@IdTipoUsuario", idTipoUsuário);

                    conexao.Open();

                    if (command.ExecuteNonQuery() > 0)
                    {
                        conexao.Close();
                        return true;
                    }
                    conexao.Close();
                    return false;
                }
            }
            catch
            {
                throw new Exception("Não foi possível cadastrar");
            }
        }

        public bool AlterarUsuario(int funcional, string senha, string nome)
        {
            try
            {
                using (var conexao = new SqlConnection(_connectionString))
                {
                    var command = new SqlCommand(ConsultasSQL.SQL.AlterarUsuario(), conexao);
                    command.Parameters.AddWithValue("@Funcional", funcional);
                    command.Parameters.AddWithValue("@Senha", senha);
                    command.Parameters.AddWithValue("@Nome", nome);

                    conexao.Open();

                    if (command.ExecuteNonQuery() > 0)
                    {
                        conexao.Close();
                        return true;
                    }
                    conexao.Close();
                    return false;
                }
            }
            catch
            {
                throw new Exception("Não foi possível alterar");
            }
        }

        public List<object> BuscaRelatorioVendas(DateTime data)
        {
            try
            {
                using (var conexao = new SqlConnection(_connectionString))
                {
                    var command = new SqlCommand(ConsultasSQL.SQL.RelatorioVendas(), conexao);
                    command.Parameters.AddWithValue("@DataVenda", data);                     
                    command.Parameters.AddWithValue("@DataVendaFinal", data.AddHours(24));


                    var rl = new List<object>();
                    conexao.Open();

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {

                            rl.Add(new 
                            {
                                IdProduto = reader["IdProdutoVendido"].ToString(),
                                ValorProduto = reader["ValorProduto"].ToString(),
                                FormaPagamento = reader["IdFormaPag"].ToString(),
                                ValorRecebido = reader["ValorRecebido"].ToString(),
                                Troco = reader["Troco"].ToString()
                            });
                            

                        }
                    }

                    return rl;
                }
            }
            catch
            {
                throw new Exception("Erro na consulta de carregar produtos");
            }
        }

        public List<object> BuscaRelatorioEstoque()
        {
            try
            {
                using (var conexao = new SqlConnection(_connectionString))
                {
                    var command = new SqlCommand(ConsultasSQL.SQL.RelatorioEstoque(), conexao);
                    var rl = new List<object>();
                    conexao.Open();

                    using (var reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            rl.Add(new
                            {
                                IdProduto = reader["Id"].ToString(),
                                NomeProduto = reader["Modelo"].ToString(),
                                QuantidadeNoEstoque = reader["Quantidade"].ToString(),
                                Preco = reader["Preço"].ToString()
                            });
                        }
                    }

                    return rl;
                }
            }
            catch
            {
                throw new Exception("Erro na consulta de carregar produtos");
            }
        }

    }
}
